/*
 * Created on 2005-5-14
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.haoxi.gateway.common;

/**
 * @author Administrator
 * Window - Preferences - Java - Code Style - Code Templates
 */
public interface Queue {
    //队头添加一个，添加成功返回true，否则返回false；
    public boolean add(Object obj);
    
    //队尾减少一个，没减少返回null
    public Object sub();
    
    //是否为空
    public boolean isEmpty();

    //返回队列是否满了
    public boolean isFull();
    
    //队列长度
    public int getLength();
    
    //清空队列
    public int clear();
    
    //根据位置获得对象，没有返回null
    public Object getByPosition(int index);
    
    //获得对象的位置，没有返回-1
    public int getPosition(Object obj);
    
    //插入一个对象，添加成功返回true，否则返回false；
    public boolean insert(int nIndex, Object obj);
    
    //删除一个对象，没减少返回null
    public Object remove(int index);
    
    //剩余的空位
    public int getRemains();
    
    //获得队列最大长度
    public int getMaxLength();
    
    //设置队列最大长度
    public boolean setMaxLength(int length);

    //获得队列的快照（对象拷贝出来）
    public Object[] getQueueSnap();
    
    //没有对象的返回值
    public static final int NOT_HAVE_OBJECT = -1;
    
    //当Queue改变时的监听器，返回监听器的编号
    public int addChengeListener(Runnable run);
    //删除一个监听器
    public void removeChengeListener(Runnable run);
    //删除所有改变时的监听器
    public int removeAllChengeListener();
    
    //get queue name
    public String getName();
    
    //setup queue name
    public void setName(String sName);
}
